/*************************************************
 *	文件名称：bracket.c
 *	文件说明：测试 行编辑
 *	程序平台：for linux
 *	文件作者：Jason <jasonsunsoft@163.com>
 *	文件时间：
*************************************************/

#include"../3.1/mydata.h"
#include <stdio.h>

char * storage(SqStack S)
{
	int len, i;
	char * str;

	len = StackLength(S);
	str = malloc((len + 1) * sizeof(char));
	if (!str)
		exit(OVERFLOW);
	for (i = 0; i < len; ++i)
	{
		str[i] = S.base[i];
	}
	str[len] = '\0';
	return str;

}
void LineEdit()
{
	SqStack S;
	int ch, c;
	char * str;

	InitStack(&S);
	ch = getchar();
	while(ch != EOF)
	{
		while(ch != EOF && ch != '\n')
		{
			switch(ch)
			{
			case '#':
				Pop(&S, &c);	//仅当栈非空时退栈
				break;
			case '@':
				ClearStack(&S);	//重置S为空栈
				break;
			default:
				Push(&S, ch);	//有效字符进栈，未考虑栈满情形
				break;
			}
			ch = getchar();		//从终端接收下一个字符
		}
		str = storage(S);
		printf("%s\n", str);
		free(str);
		ClearStack(&S);
		if (ch != EOF)
			ch = getchar();
	}
	DestroyStack(&S);
}

int main()
{
	LineEdit();

	return 0;
}
